package org.auf.controllers;

import java.io.IOException;
import java.util.Date;

import org.apache.log4j.Logger;
import org.auf.core.Controller;
import org.auf.core.UIDGenerator;
import org.auf.model.dao.IAlertDAO;
import org.auf.model.jdbc.AlertDAOJDBC;
import org.auf.model.jdbc.PairedDAOJDBC;
import org.auf.model.jdbc.PairedEventDAOJDBC;
import org.auf.to.Alert;
import org.auf.to.Paired;

public class PairedEventController extends Controller {

	static Logger log = Logger.getLogger(PairedEventController.class.getName());
	@Override
	public void show() {

		if (user == null) {
			view.load("error");
			view.assignVar("error", "Pasa apuntarse hay que estar identificado");
			view.show();
		}

		if (PairedEventDAOJDBC.getInstance().selectPairedEventByUser(user)){
			avisar("Usted ya esta dado de alta para el emparejamiento de esta semana");
			log.info("El Usuario ya estaba dado de alta para el emparejamiento de esta semana");
		}
		else{
			if (!user.getGeek()){
				PairedEventDAOJDBC.getInstance().insertPairedEvent(user);
				avisar("Se ha apuntado para el emparejamiento de esta semana");
				log.info("el usuario " +user.getId() + " se ha apuntado para el emparejamiento de esta semana");
			}
			else tratarGeeks();
			}
		try {
			response.sendRedirect(BaseURLs.MAIN_PAGE);
			}catch (IOException e) {
				log.error("Error al redigirigir a la pagina principal: "+e);
			}
	}
	
	private void tratarGeeks(){
		
		Paired lastPaired = PairedDAOJDBC.getInstance().selectLastPairedByGeek(user);
		if(lastPaired==null || lastPaired.getTestCompleted()){
			PairedEventDAOJDBC.getInstance().insertPairedEvent(user);
			avisar("Se ha apuntado para el emparejamiento de esta semana");
			log.info("el usuario " +user.getId() + " se ha apuntado para el emparejamiento de esta semana");
		}
		else{
			avisar("Tiene que completar el test de su ultimo emparejamiento antes de volver a emparejarse");
			log.info("el usuario " +user.getId() + " se ha intentado apuntar si completar su ultimo test");
		}
	}
	
	private void avisar(String mensaje){
		Alert alerta=new Alert();
		alerta.setId(UIDGenerator.getInstance().getKey());
		alerta.setTitle("Emparejamiento");
		alerta.setBody(mensaje);
		alerta.setDate(new Date());
		alerta.setReaded(false);
		alerta.setReceiver(user);
		IAlertDAO dao = new AlertDAOJDBC();
		if(!dao.insertAlert(alerta))log.error("Error al crear la alerta");;
		
	}
}